/**
 * 食品类，继承自商品基类
 * 包含食品特有的属性和方法
 */
public class FoodProduct extends Product {
    private String expiryDate;    // 保质期
    private String ingredients;   // 成分
    private String nutritionalInfo; // 营养信息
    private boolean isOrganic;    // 是否有机

    /**
     * 构造方法
     * @param productId 商品编号
     * @param name 商品名称
     * @param price 商品价格
     * @param description 商品描述
     * @param stock 库存数量
     * @param expiryDate 保质期
     * @param ingredients 成分
     * @param nutritionalInfo 营养信息
     * @param isOrganic 是否有机
     * @throws InvalidPriceException 当价格无效时抛出异常
     */
    public FoodProduct(String productId, String name, double price, String description, int stock,
                      String expiryDate, String ingredients, String nutritionalInfo, boolean isOrganic) throws InvalidPriceException {
        super(productId, name, price, description, stock);
        this.expiryDate = expiryDate != null ? expiryDate : "";
        this.ingredients = ingredients != null ? ingredients : "";
        this.nutritionalInfo = nutritionalInfo != null ? nutritionalInfo : "";
        this.isOrganic = isOrganic;
    }

    /**
     * 获取保质期
     * @return 保质期
     */
    public String getExpiryDate() {
        return expiryDate;
    }

    /**
     * 设置保质期
     * @param expiryDate 保质期，自动处理null值
     */
    public void setExpiryDate(String expiryDate) {
        this.expiryDate = expiryDate != null ? expiryDate : "";
    }

    /**
     * 获取成分
     * @return 成分信息
     */
    public String getIngredients() {
        return ingredients;
    }

    /**
     * 设置成分
     * @param ingredients 成分信息，自动处理null值
     */
    public void setIngredients(String ingredients) {
        this.ingredients = ingredients != null ? ingredients : "";
    }

    /**
     * 获取营养信息
     * @return 营养信息
     */
    public String getNutritionalInfo() {
        return nutritionalInfo;
    }

    /**
     * 设置营养信息
     * @param nutritionalInfo 营养信息，自动处理null值
     */
    public void setNutritionalInfo(String nutritionalInfo) {
        this.nutritionalInfo = nutritionalInfo != null ? nutritionalInfo : "";
    }

    /**
     * 判断是否为有机食品
     * @return 是否有机
     */
    public boolean isOrganic() {
        return isOrganic;
    }

    /**
     * 设置是否为有机食品
     * @param organic 是否有机
     */
    public void setOrganic(boolean organic) {
        isOrganic = organic;
    }

    /**
     * 获取食品认证信息
     * @return 认证信息
     */
    public String getCertificationInfo() {
        return isOrganic ? "有机认证" : "普通食品";
    }

    /**
     * 判断食品是否过期（简化判断，实际应与当前日期比较）
     * @return 是否过期
     */
    public boolean isExpired() {
        // 实际应用中应该与当前日期比较
        // 这里仅作为演示
        return expiryDate.isEmpty();
    }

    /**
     * 实现抽象方法，返回商品详细信息
     * @return 商品详细信息
     */
    @Override
    public String getDetails() {
        return toString() + "\n" +
               "商品类型: 食品\n" +
               "描述: " + getDescription() + "\n" +
               "保质期: " + expiryDate + "\n" +
               "成分: " + ingredients + "\n" +
               "营养信息: " + nutritionalInfo + "\n" +
               "是否有机: " + (isOrganic ? "是" : "否") + "\n" +
               "认证信息: " + getCertificationInfo();
    }
}